1. 介绍
目前使用最多的是Spring Cloud Zuul, 所以本文也针对Spring讲解。
2. 使用
共3步
1.创建一个spring boot工程
如何创建本文不做讲解
2. 修改pom引入zuul和eureka
本文服务治理使用Eureka也可以使用其他组件,例如: Consul。
1 | <dependency> |
3.添加注释
在启动类上加上注释@EnableZuulProxy,@EnableEurekaClient
4.添加配置
1 | #eureka配置 |
3. 配置详解
1. 关于超时设置
zuul的超时配置有两种方式:
- 直接使用url配置的路由,是基于httpclient来发送请求,可以直接设置socket的连接时间
1 | zuul: |
- 使用ribbon的轮训机制,可以配置ribbon超时时间,也可以配置hystrix超时时间,两者取配置最小者
1 | ribbon: |
2. 路由相关配置
模式
- serviceId模式
1 | zuul: |
- url模式
不能使用Hystrix和Ribbon
1 | zuul: |
路由配置
一般是写成如下格式:
1 | #路由名称 api-a |
还可以更简单一点如下:
1 | zuul: |
如果路由映射规则不写也可以,系统会默认生成,比如service-one,service-two 不自动生成如下格式:
1 | zuul: |
如果像排除某个服务路由映射 可以使用如下配置:
1 | zuul: |
如果只是不想给默写几个做映射,可以使用如下配置:
1 | zuul: |
如果希望在访问的url上加前缀路径:
1 | zuul: |
如果希望某个接口访问zuul本地的接口,而不是路由到服务:
1 | zuul: |
url通配符规则如下:
通配符 含义 举例 解释 ? 匹配任意单个字符 /service-one/? 匹配/service-one/a,/service-one/b,/service-one/c等 * 匹配任意数量的字符 /service-one/* 匹配/service-one/aaa,service-one/bbb,/service-one/ccc等
,无法匹配/service-one/a/b/c ** 匹配任意数量的字符 /service-one/** 匹配/service-one/aaa,service-one/bbb,/service-one/ccc等
,也可以匹配/service-one/a/b/c
3. 连接数配置
zuul的连接数配置有两种方式:
- 直接使用url配置的路由,适用于ApacheHttpClient,如果是okhttp无效。每个服务的http客户端连接池最大连接和每个route可用的最大连接数
1 | zuul: |
- 使用ribbon的超时
1 | ribbon: |
4. 隔离策略
默认情况下,Zuul的隔离策略是SEMAPHORE(也是目前比较推荐的)。
可设置将隔离策略改为THREAD。
1 | zuul.ribbonIsolationStrategy=THREAD |
- 线程隔离 - THREAD
当设置隔离策略为THREAD时,Hystrix的线程隔离策略将作用所有路由,HystrixThreadPoolKey 默认为RibbonCommand,这意味着,所有路由的HystrixCommand都会在相同的Hystrix线程池中执行。可使用以下配置,让每个路由使用独立的线程池:
1 | zuul: |
- 信号量隔离 - SEMAPHORE
1 | zuul: |
为指定服务配置信号量(推荐用法)
1 | zuul: |
配置生效优先级如下(优先级依次降低):
1 | [优先级1] zuul.eureka.api.semaphore.maxSemaphores |
5. 与Hystrix
默认是开启,只需配置timeout即可
1 | hystrix: |
设置超时也可以针对某些服务
1 | [优先级1] hystrix.command.default.XXX |
其他配置
1 | hystrix: |
6. 与Ribbon
1 | ribbon: |
1 | zuul: |
如果使用重试配置需要 pom 需引入jar包
1 | <dependency> |
7. 其他
禁用Filter
1 | zuul.FormBodyWrapperFilter.pre.disable= true |
8. 说明
以上配置主要是针对Dalston版本